package malagaAcoge.controller.beans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import malagaAcoge.controller.daos.InformacionFamiliarDao;
import malagaAcoge.controller.daos.SituacionAlojamientoDao;
import malagaAcoge.model.entities.Expediente;
import malagaAcoge.model.entities.Familiar;
import malagaAcoge.model.entities.Informacionfamiliar;
import malagaAcoge.model.entities.Tecnico;
import malagaAcoge.model.entities.Usuario;

public class InformacionFamiliarBean {
	private Usuario usuarioSelecionado;
	private Tecnico currentTecnico;
	private Informacionfamiliar informacionFamiliar;
	private Informacionfamiliar currentInformacionFamiliar;
	private Familiar nuevoFamiliar;
	private List<Familiar> familiares;
	private Familiar familiar;

	public InformacionFamiliarBean() {
		setCurrentTecnico((Tecnico) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("tecnico"));
		setUsuarioSelecionado((Usuario) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("usuario"));
		informacionFamiliar = new Informacionfamiliar();
		nuevoFamiliar = new Familiar();
		familiar = new Familiar();
	}

	public void addInformacionFamiliar() {
		Expediente expediente = getUsuarioSelecionado().getExpedientes().get(0);
		informacionFamiliar.setExpedienteBean(expediente);
		new InformacionFamiliarDao();
		InformacionFamiliarDao.createInformacionfamiliar(informacionFamiliar);
		getUsuarioSelecionado().getExpedientes().get(0)
				.setInformacionfamiliars(new ArrayList<Informacionfamiliar>());
		getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().add(informacionFamiliar);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("usuario", usuarioSelecionado);
		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Exito",
				"Datos guardados correctamente."));
	}

	public void updateInformacionFamiliar() {
		informacionFamiliar = getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().get(0);
		new InformacionFamiliarDao();
		InformacionFamiliarDao.updateInformacionfamiliar(informacionFamiliar);
		getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().set(0, informacionFamiliar);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("usuario", usuarioSelecionado);
		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Exito",
				"Datos modificados correctamente."));
		currentInformacionFamiliar = null;
	}

	public void eliminarFamiliar() {
		familiar = (Familiar) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().remove("familiar");
		informacionFamiliar = getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().get(0);
		new InformacionFamiliarDao();
		InformacionFamiliarDao.deleteFamiliar(familiar);
		informacionFamiliar.getFamiliars().remove(familiar);
		getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().set(0, informacionFamiliar);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("usuario", usuarioSelecionado);
		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Exito",
				"Familiar eliminado."));
		getFamiliares();
	}

	public void addFamiliar() {
		informacionFamiliar = getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().get(0);
		nuevoFamiliar.setInformacionfamiliar(informacionFamiliar);
		new InformacionFamiliarDao();
		InformacionFamiliarDao.createFamiliar(nuevoFamiliar);
		if (informacionFamiliar.getFamiliars() == null) {
			informacionFamiliar.setFamiliars(new ArrayList<Familiar>());
		}
		informacionFamiliar.getFamiliars().add(nuevoFamiliar);
		getUsuarioSelecionado().getExpedientes().get(0)
				.getInformacionfamiliars().set(0, informacionFamiliar);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("usuario", usuarioSelecionado);
		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Exito",
				"Datos guardados correctamente."));
		nuevoFamiliar = new Familiar();
		getFamiliares();
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public Usuario getUsuarioSelecionado() {

		return usuarioSelecionado;
	}

	public void setCurrentTecnico(Tecnico currentTecnico) {
		this.currentTecnico = currentTecnico;
	}

	public Tecnico getCurrentTecnico() {
		return currentTecnico;
	}

	public void setInformacionFamiliar(Informacionfamiliar informacionFamiliar) {
		this.informacionFamiliar = informacionFamiliar;
	}

	public Informacionfamiliar getInformacionFamiliar() {
		return informacionFamiliar;
	}

	public void setNuevoFamiliar(Familiar nuevoFamiliar) {
		this.nuevoFamiliar = nuevoFamiliar;
	}

	public Familiar getNuevoFamiliar() {
		return nuevoFamiliar;
	}

	public void setFamiliares(List<Familiar> familiares) {
		this.familiares = familiares;
	}

	public List<Familiar> getFamiliares() {
		familiares = new ArrayList<Familiar>();
		if (getCurrentInformacionFamiliar() != null) {
			new InformacionFamiliarDao();
			familiares = InformacionFamiliarDao
					.findFamiliaresByidInformacion(currentInformacionFamiliar
							.getIdinformacionFamiliar());
		}
		return familiares;
	}

	public void setFamiliar(Familiar familiar) {
		this.familiar = familiar;
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("familiar", familiar);
	}

	public Familiar getFamiliar() {
		return familiar;
	}

	public void setCurrentInformacionFamiliar(
			Informacionfamiliar currentInformacionFamiliar) {
		this.currentInformacionFamiliar = currentInformacionFamiliar;
	}

	public Informacionfamiliar getCurrentInformacionFamiliar() {
		if (currentInformacionFamiliar == null
				&& getUsuarioSelecionado().getExpedientes() != null
				&& !getUsuarioSelecionado().getExpedientes().isEmpty()) {
			new InformacionFamiliarDao();
			currentInformacionFamiliar = InformacionFamiliarDao
					.findInformacionByExpediente(getUsuarioSelecionado()
							.getExpedientes().get(0).getIdExpediente());
		}
		return currentInformacionFamiliar;
	}
}
